MyBatis 您所在的位置:网站首页 mybatisplus 返回自定义对象 MyBatis

MyBatis

2024-07-17 17:27| 来源: 网络整理| 查看: 265

大家好,又见面了,我是你们的朋友全栈君。

一、引言

分页查询每个人程序猿几乎都使用过,但是有部分同学不懂什么是物理分页和逻辑分页。

物理分页:相当于执行了limit分页语句,返回部分数据。物理分页只返回部分数据占用内存小,能够获取数据库最新的状态,实施性比较强,一般适用于数据量比较大,数据更新比较频繁的场景。

逻辑分页:一次性把全部的数据取出来,通过程序进行筛选数据。如果数据量大的情况下会消耗大量的内存,由于逻辑分页只需要读取数据库一次,不能获取数据库最新状态,实施性比较差,适用于数据量小,数据稳定的场合。

那么MP中的物理分页怎么实现呢? 往下看往下看

二、配置

创建MybatisPlusConfig配置类,需要配置分页插件,小编使用的Spring boot配置方式。

代码语言:javascript复制/** * @Auther: IT贱男 * @Date: 2019/6/12 15:06 * @Description: MybatisPlus配置类 */ @Configuration public class MyBatisPlusConfig { /** * 分页插件 * @return */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } }三、具体分页实现

MP的Wrapper提供了两种分页查询的方式,源码如下:

代码语言:javascript复制 /** * 根据 entity 条件,查询全部记录(并翻页) * * @param page 分页查询条件(可以为 RowBounds.DEFAULT) * @param queryWrapper 实体对象封装操作类(可以为 null) */ IPage selectPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); /** * 根据 Wrapper 条件,查询全部记录(并翻页) * * @param page 分页查询条件 * @param queryWrapper 实体对象封装操作类 */ IPage selectMapsPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);

可见两个分页方法参数都是一致的,只是返回参数略有不同,具体选择根据实际业务为准。

代码语言:javascript复制 /** * 分页查询 */ @Test public void selectByPage() { QueryWrapper wrapper = new QueryWrapper(); wrapper.like("name", "雨").lt("age", 40); Page page = new Page(1,2); //IPage userIPage = userMapper.selectPage(page, wrapper); IPage mapIPage = userMapper.selectMapsPage(page, wrapper); System.out.println("总页数"+mapIPage.getPages()); System.out.println("总记录数"+mapIPage.getTotal()); List records = mapIPage.getRecords(); records.forEach(System.out::println); }

以上分页查询执行sql如下,先是查询了一次总记录数,然后在查询的数据。

代码语言:javascript复制DEBUG==> Preparing: SELECT COUNT(1) FROM user WHERE name LIKE ? AND age < ? DEBUG==> Parameters: %雨%(String), 40(Integer) TRACE Parameters: %雨%(String), 40(Integer), 0(Long), 2(Long) TRACE


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有